home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / X11R4 / cmds / X / ddx / sprite.X11R3 / hdr / mem_rop_impl_ops.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-03  |  5.9 KB  |  261 lines

  1. /* @(#)mem_rop_impl_ops.h 1.4 88/02/08 SMI */
  2.  
  3. /*
  4.  * Copyright 1986 by Sun Microsystems,  Inc.
  5.  */
  6.  
  7. #ifndef    mem_rop_impl_ops_DEFINED
  8. #define    mem_rop_impl_ops_DEFINED
  9.  
  10. /*
  11.  * rasterop function macros
  12.  */
  13.  
  14. /*
  15.  * unmasked rop
  16.  */
  17. #define    OP_urop0(d,s)    (0)
  18. #define    OP_urop1(d,s)    (~((d) | (s)))
  19. #define    OP_urop2(d,s)    ((d) & ~(s))
  20. #define    OP_urop3(d,s)    (~(s))
  21. #define    OP_urop4(d,s)    (~(d) & (s))
  22. #define    OP_urop5(d,s)    (~(d))
  23. #define    OP_urop6(d,s)    ((d) ^ (s))
  24. #define    OP_urop7(d,s)    (~((d) & (s)))
  25. #define    OP_urop8(d,s)    ((d) & (s))
  26. #define    OP_urop9(d,s)    ((d) ^ ~(s))
  27. #define    OP_uropA(d,s)    (d)
  28. #define    OP_uropB(d,s)    ((d) | ~(s))
  29. #define    OP_uropC(d,s)    (s)
  30. #define    OP_uropD(d,s)    (~(d) | (s))
  31. #define    OP_uropE(d,s)    ((d) | (s))
  32. #define    OP_uropF(d,s)    (~0)
  33.  
  34. /*
  35.  * masked rop
  36.  *
  37.  * correct mask:    m = OP_mmsk(mask)
  38.  * perform rop:        d = OP_mrop(dst, mask, src)
  39.  */
  40. #define    OP_mmsk0(m)    (~(m))
  41. #define    OP_mrop0(d,m,s)    ((d) & (m))
  42.  
  43. #define    OP_mmsk1(m)    (m)
  44. #define    OP_mrop1(d,m,s)    ((d) ^ ((m) & ((d) | ~(s))))
  45.  
  46. #define    OP_mmsk2(m)    (~(m))
  47. #define    OP_mrop2(d,m,s)    ((d) & ((m) | ~(s)))
  48.  
  49. #define    OP_mmsk3(m)    (m)
  50. #define    OP_mrop3(d,m,s)    ((d) ^ ((m) & ((d) ^ ~(s))))
  51.  
  52. #define    OP_mmsk4(m)    (m)
  53. #define    OP_mrop4(d,m,s)    ((d) ^ ((m) & ((d) | (s))))
  54.  
  55. #define    OP_mmsk5(m)    (m)
  56. #define    OP_mrop5(d,m,s)    ((d) ^ (m))
  57.  
  58. #define    OP_mmsk6(m)    (m)
  59. #define    OP_mrop6(d,m,s)    ((d) ^ ((m) & (s)))
  60.  
  61. #define    OP_mmsk7(m)    (m)
  62. #define    OP_mrop7(d,m,s)    ((d) ^ ((m) & (~(d) | (s))))
  63.  
  64. #define    OP_mmsk8(m)    (~(m))
  65. #define    OP_mrop8(d,m,s)    ((d) & ((m) | (s)))
  66.  
  67. #define    OP_mmsk9(m)    (m)
  68. #define    OP_mrop9(d,m,s)    ((d) ^ ((m) & ~(s)))
  69.  
  70. #define    OP_mmskA(m)    (m)
  71. #define    OP_mropA(d,m,s)    (d)
  72.  
  73. #define    OP_mmskB(m)    (m)
  74. #define    OP_mropB(d,m,s)    ((d) | ((m) & ~(s)))
  75.  
  76. #define    OP_mmskC(m)    (m)
  77. #define    OP_mropC(d,m,s)    ((d) ^ ((m) & ((d) ^ (s))))
  78.  
  79. #define    OP_mmskD(m)    (m)
  80. #define    OP_mropD(d,m,s)    ((d) ^ ((m) & ~((d) & (s))))
  81.  
  82. #define    OP_mmskE(m)    (m)
  83. #define    OP_mropE(d,m,s)    ((d) | ((m) & (s)))
  84.  
  85. #define    OP_mmskF(m)    (m)
  86. #define    OP_mropF(d,m,s)    ((d) | (m))
  87.  
  88.  
  89. /*
  90.  * unmasked fill
  91.  *
  92.  * generate fill constant:    k = OP_ufgen(color)
  93.  * perform unmasked fill:    d = OP_ufill(dst, constant)
  94.  */
  95. #define    OP_ufgen0(c)    (0)
  96. #define    OP_ufill0(d,k)    (k)
  97.  
  98. #define    OP_ufgen1(c)    (c)
  99. #define    OP_ufill1(d,k)    (~((d) | (k)))
  100.  
  101. #define    OP_ufgen2(c)    (~(c))
  102. #define    OP_ufill2(d,k)    ((d) & (k))
  103.  
  104. #define    OP_ufgen3(c)    (~(c))
  105. #define    OP_ufill3(d,k)    (k)
  106.  
  107. #define    OP_ufgen4(c)    (c)
  108. #define    OP_ufill4(d,k)    (~(d) & (k))
  109.  
  110. #define    OP_ufgen5(c)    (c)
  111. #define    OP_ufill5(d,k)    (~(d))
  112.  
  113. #define    OP_ufgen6(c)    (c)
  114. #define    OP_ufill6(d,k)    ((d) ^ (k))
  115.  
  116. #define    OP_ufgen7(c)    (c)
  117. #define    OP_ufill7(d,k)    (~((d) & (k)))
  118.  
  119. #define    OP_ufgen8(c)    (c)
  120. #define    OP_ufill8(d,k)    ((d) & (k))
  121.  
  122. #define    OP_ufgen9(c)    (~(c))
  123. #define    OP_ufill9(d,k)    ((d) ^ (k))
  124.  
  125. #define    OP_ufgenA(c)    (c)
  126. #define    OP_ufillA(d,k)    (d)
  127.  
  128. #define    OP_ufgenB(c)    (~(c))
  129. #define    OP_ufillB(d,k)    ((d) | (k))
  130.  
  131. #define    OP_ufgenC(c)    (c)
  132. #define    OP_ufillC(d,k)    (k)
  133.  
  134. #define    OP_ufgenD(c)    (c)
  135. #define    OP_ufillD(d,k)    (~(d) | (k))
  136.  
  137. #define    OP_ufgenE(c)    (c)
  138. #define    OP_ufillE(d,k)    ((d) | (k))
  139.  
  140. #define    OP_ufgenF(c)    (~0)
  141. #define    OP_ufillF(d,k)    (k)
  142.  
  143.  
  144. /*
  145.  * masked fill
  146.  *
  147.  * generate fill constant:    k = OP_mfgen(mask, color)
  148.  * generate mask for fill:    m = OP_mfmsk(mask)
  149.  * perform masked fill:        d = OP_mfill(dst, mask, constant)
  150.  */
  151. #define    OP_mfgen0(m,c)    (c)
  152. #define    OP_mfmsk0(m)    (~(m))
  153. #define    OP_mfill0(d,m,k) ((d) & (m))
  154.  
  155. #define    OP_mfgen1(m,c)    (~(c))
  156. #define    OP_mfmsk1(m)    (m)
  157. #define OP_mfill1(d,m,k) ((d) ^ ((m) & ((d) | (k))))
  158.  
  159. #define    OP_mfgen2(m,c)    (~(m) | ~(c))
  160. #define    OP_mfmsk2(m)    (m)
  161. #define    OP_mfill2(d,m,k) ((d) & (k))
  162.  
  163. #define    OP_mfgen3(m,c)    ((m) & ~(c))
  164. #define    OP_mfmsk3(m)    (~(m))
  165. #define    OP_mfill3(d,m,k) (((d) & (m)) | (k))    /* needs work */
  166.  
  167. #define    OP_mfgen4(m,c)    (c)
  168. #define    OP_mfmsk4(m)    (m)
  169. #define    OP_mfill4(d,m,k) ((d) ^ ((m) & ((d) | (k))))
  170.  
  171. #define    OP_mfgen5(m,c)    (c)
  172. #define    OP_mfmsk5(m)    (m)
  173. #define    OP_mfill5(d,m,k) ((d) ^ (m))
  174.  
  175. #define    OP_mfgen6(m,c)    ((m) & (c))
  176. #define    OP_mfmsk6(m)    (m)
  177. #define    OP_mfill6(d,m,k) ((d) ^ (k))
  178.  
  179. #define    OP_mfgen7(m,c)    (c)
  180. #define    OP_mfmsk7(m)    (m)
  181. #define    OP_mfill7(d,m,k) ((d) ^ ((m) & (~(d) | (k))))
  182.  
  183. #define    OP_mfgen8(m,c)    (~(m) | (c))
  184. #define    OP_mfmsk8(m)    (m)
  185. #define    OP_mfill8(d,m,k) ((d) & (k))
  186.  
  187. #define    OP_mfgen9(m,c)    ((m) & ~(c))
  188. #define    OP_mfmsk9(m)    (m)
  189. #define    OP_mfill9(d,m,k) ((d) ^ (k))
  190.  
  191. #define    OP_mfgenA(m,c)    (c)
  192. #define    OP_mfmskA(m)    (m)
  193. #define    OP_mfillA(d,m,k) (d)
  194.  
  195. #define    OP_mfgenB(m,c)    ((m) & ~(c))
  196. #define    OP_mfmskB(m)    (m)
  197. #define    OP_mfillB(d,m,k) ((d) | (k))
  198.  
  199. #define    OP_mfgenC(m,c)    ((m) & (c))
  200. #define    OP_mfmskC(m)    (~(m))
  201. #define    OP_mfillC(d,m,k) (((d) & (m)) | (k))    /* needs work */
  202.  
  203. #define    OP_mfgenD(m,c)    (~(c))
  204. #define    OP_mfmskD(m)    (m)
  205. #define    OP_mfillD(d,m,k) ((d) ^ ((m) & (~(d) | (k))))
  206.  
  207. #define    OP_mfgenE(m,c)    ((m) & (c))
  208. #define    OP_mfmskE(m)    (m)
  209. #define    OP_mfillE(d,m,k) ((d) | (k))
  210.  
  211. #define    OP_mfgenF(m,c)    (c)
  212. #define    OP_mfmskF(m)    (m)
  213. #define    OP_mfillF(d,m,k) ((d) | (m))
  214.  
  215.  
  216. /*
  217.  * unmasked fill, color = 0
  218.  * (pcc is too dumb for this)
  219.  */
  220. #define    OP_uzero0(d)    (0)
  221. #define    OP_uzero1(d)    (~(d))
  222. #define    OP_uzero2(d)    (d)
  223. #define    OP_uzero3(d)    (~0)
  224. #define    OP_uzero4(d)    (0)
  225. #define    OP_uzero5(d)    (~(d))
  226. #define    OP_uzero6(d)    (d)
  227. #define    OP_uzero7(d)    (~0)
  228. #define    OP_uzero8(d)    (0)
  229. #define    OP_uzero9(d)    (~(d))
  230. #define    OP_uzeroA(d)    (d)
  231. #define    OP_uzeroB(d)    (~0)
  232. #define    OP_uzeroC(d)    (0)
  233. #define    OP_uzeroD(d)    (~(d))
  234. #define    OP_uzeroE(d)    (d)
  235. #define    OP_uzeroF(d)    (~0)
  236.  
  237. /*
  238.  * masked fill, color = 0
  239.  *
  240.  * generate mask for fill:    m = OP_mfmsk(mask)
  241.  * perform masked zero fill:    d = OP_mzero(dst, mask)
  242.  */
  243. #define    OP_mzero0(d,m)    ((d) & (m))
  244. #define OP_mzero1(d,m)    ((d) ^ (m))
  245. #define    OP_mzero2(d,m)    (d)
  246. #define    OP_mzero3(d,m)    ((d) | ~(m))    /* problem */
  247. #define    OP_mzero4(d,m)    ((d) & ~(m))    /* problem */
  248. #define    OP_mzero5(d,m)    ((d) ^ (m))
  249. #define    OP_mzero6(d,m)    (d)
  250. #define    OP_mzero7(d,m)    ((d) | (m))
  251. #define    OP_mzero8(d,m)    ((d) & (m))
  252. #define    OP_mzero9(d,m)    ((d) ^ (m))
  253. #define    OP_mzeroA(d,m)    (d)
  254. #define    OP_mzeroB(d,m)    ((d) | (m))
  255. #define    OP_mzeroC(d,m)    ((d) & (m))
  256. #define    OP_mzeroD(d,m)    ((d) ^ (m))
  257. #define    OP_mzeroE(d,m)    (d)
  258. #define    OP_mzeroF(d,m)    ((d) | (k))
  259.  
  260. #endif
  261.